#include "vl_exception.h"
#include "utils/vl_buffer.h"

using namespace VL;

/**
 * @Author: CimZzz
 * @Date: 2022-06-23 12:09:28
 * 
 * 构造方法
 */
VLException::VLException() {

}

/**
 * @Author: CimZzz
 * @Date: 2022-06-10 16:55:06
 * 
 * 构造方法
 * @param topic 主题
 * @param fmt 格式化字符串
 * @param ... 格式化参数
 */
VLException::VLException(const char * topic, const char * fmt, ...) {
	va_list va;
	va_start(va, fmt);

	Buffer printBuffer;
	printBuffer.appendVPrint(fmt, va);
	printBuffer.appendByte('\0');
	
	va_end(va);

	this->message = "[" + std::string(topic) + "]: " + std::string(printBuffer.getBufferAsChar());
}


/**
 * @Author: CimZzz
 * @Date: 2022-06-10 16:55:06
 * 
 * 构造方法
 * @param topic 主题
 * @param fmt 格式化字符串
 * @param valist 变长格式化参数列表
 */
VLException::VLException(const char * topic, const char * fmt, va_list valist) {
	Buffer printBuffer;
	printBuffer.appendVPrint(fmt, valist);
	printBuffer.appendByte('\0');
	
	this->message = "[" + std::string(topic) + "]: " + std::string(printBuffer.getBufferAsChar());
}


/**
 * @Author: CimZzz
 * @Date: 2022-06-10 16:56:16
 * 
 * 获取异常消息
 * @return 异常消息
 */
std::string VLException::getMessage() const {
	return this->message;
}